//! log4r 基础使用示例
//!
//! 演示 log4r 的核心功能：
//! - 零配置快速初始化
//! - 6 级日志宏
//! - Builder 模式配置（含文件输出）
//! - 安全关闭
//!
//! 运行示例：
//! ```bash
//! cargo run --example basic
//! ```
//!
//! 彩色输出示例（需要 color feature）：
//! ```bash
//! cargo run --example colored_console --features color
//! ```

use log4r::{builder, shutdown, ConsoleTarget, Level};

fn main() {
    println!("=== log4r 基础示例 ===\n");

    // 示例 1: Builder 模式 + 文件输出
    example_with_file_output();

    // 示例 2: 配置文件初始化（展示代码）
    println!("\n--- 配置文件初始化示例代码 ---");
    show_config_file_example();

    // 示例 3: 彩色输出提示
    println!("\n--- 彩色输出 ---");
    show_colored_example();

    println!("\n=== 示例结束 ===");
}

/// 示例 1: Builder 模式 + 文件输出
fn example_with_file_output() {
    println!("--- 示例 1: Builder 模式 + 文件输出 ---\n");

    // 创建日志目录
    let log_file = "logs/basic_example.log";

    // 使用 Builder 模式配置：控制台 + 文件双输出
    #[cfg(feature = "color")]
    let result = builder()
        .with_level(Level::Debug) // DEBUG 级别，显示更多日志
        .with_app_name("basic-example")
        .with_console(ConsoleTarget::Stdout)
        .with_colored() // 启用彩色输出
        .with_file(log_file) // 同时输出到文件
        .init();

    #[cfg(not(feature = "color"))]
    let result = builder()
        .with_level(Level::Debug) // DEBUG 级别，显示更多日志
        .with_app_name("basic-example")
        .with_console(ConsoleTarget::Stdout)
        .with_file(log_file) // 同时输出到文件
        .init();

    if let Err(e) = result {
        eprintln!("初始化失败: {}", e);
        return;
    }

    println!("日志系统已初始化");
    println!("日志文件: {}\n", log_file);

    // 使用 6 级日志宏
    log4r::trace!("TRACE 级别日志（DEBUG 模式下不显示）");
    log4r::debug!("DEBUG 级别日志");
    log4r::info!("INFO 级别日志");
    log4r::warn!("WARN 级别日志");
    log4r::error!("ERROR 级别日志");

    // 带格式化参数的日志
    let user = "Max";
    let count = 42;
    log4r::info!("用户 {} 已登录，操作次数: {}", user, count);

    // 带 target 的日志
    log4r::info!(target: "my_app::db", "数据库连接成功");
    log4r::debug!(target: "my_app::http", "HTTP 请求处理中...");

    // FATAL 级别 - 会同时写入系统日志
    println!("\n记录 FATAL 级别日志（会写入系统日志）：");
    log4r::fatal!("FATAL 级别日志 - 致命错误示例");

    // 安全关闭，确保所有日志写入完成
    if let Err(e) = shutdown() {
        eprintln!("关闭失败: {}", e);
    }

    println!("\n日志系统已安全关闭");

    // 显示文件内容
    println!("\n--- 日志文件内容 ({}) ---", log_file);
    match std::fs::read_to_string(log_file) {
        Ok(content) => println!("{}", content),
        Err(e) => eprintln!("读取日志文件失败: {}", e),
    }
}

/// 示例 2: 配置文件初始化（展示代码）
fn show_config_file_example() {
    let toml_example = r#"# log4r.toml 配置文件示例
[log4r]
level = "info"
app_name = "my-app"

# 模块级别覆盖
[log4r.modules]
"my_app::db" = "debug"
"my_app::http" = "warn"

# 控制台输出配置
[log4r.appenders.console]
enabled = true
target = "stdout"
level = "info"

# 文件输出配置
[log4r.appenders.file]
enabled = true
path = "logs/app.log"
level = "debug"

# 异步配置
[log4r.async]
enabled = true
queue_size = 10000"#;

    let code = r#"use log4r::init_from_file;

fn main() -> Result<(), log4r::Log4rError> {
    // 从配置文件初始化
    init_from_file("log4r.toml")?;

    log4r::info!("从配置文件初始化成功");

    log4r::shutdown()?;
    Ok(())
}"#;

    println!("配置文件 (log4r.toml):\n");
    println!("{}", toml_example);
    println!("\n代码:\n");
    println!("{}", code);
}

/// 示例 3: 彩色输出提示
fn show_colored_example() {
    println!("彩色控制台输出需要启用 'color' feature：\n");
    println!("  cargo run --example colored_console --features color\n");

    let code = r#"// 彩色输出示例代码 (examples/colored_console.rs)
use log4r::{builder, ConsoleTarget, Level};

fn main() -> Result<(), log4r::Log4rError> {
    builder()
        .with_level(Level::Trace)
        .with_console(ConsoleTarget::Stdout)
        .init()?;

    // 不同级别会显示不同颜色：
    // TRACE - 灰色
    // DEBUG - 蓝色
    // INFO  - 绿色
    // WARN  - 黄色
    // ERROR - 红色
    // FATAL - 红色加粗

    log4r::trace!("灰色 TRACE");
    log4r::debug!("蓝色 DEBUG");
    log4r::info!("绿色 INFO");
    log4r::warn!("黄色 WARN");
    log4r::error!("红色 ERROR");
    log4r::fatal!("红色加粗 FATAL");

    log4r::shutdown()?;
    Ok(())
}"#;

    println!("{}", code);
}
